/**
 * 认证状态管理
 * 处理用户登录、注册、权限等状态
 */
import { defineStore } from 'pinia'
import { ref, computed, onMounted } from 'vue'
import router from '@/router'
import { login as loginApi, getUserInfo, inspectlogin } from '@/api/auth'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { ElMessage } from 'element-plus'
import { useRoute } from 'vue-router'

export const useAuthStore = defineStore('auth', () => {
  // 从 sessionStorage 初始化状态
  const token = ref(getToken())
  const user = ref(JSON.parse(sessionStorage.getItem('user')) || null)
  const role = ref(sessionStorage.getItem('role'))
  const idnumber = ref(sessionStorage.getItem('idnumber'))
  const email = ref(sessionStorage.getItem('email'))
  const phone = ref(sessionStorage.getItem('phone'))
  const isAuthenticated = ref(!!sessionStorage.getItem('isAuthenticated'))
  
  // 检查登录状态
  const islogin = async () => {
      // try {
        const res = await inspectlogin()
        if (res.code === 200 && res.data === true) {
          isAuthenticated.value = true
          sessionStorage.setItem('isAuthenticated', 'true')
        } else {
          isAuthenticated.value = false
          sessionStorage.removeItem('isAuthenticated')
          // ElMessage.error('登录已过期，请重新登录')
          router.push('/login')
        }
      // } 
    //   catch (error) {
    // isAuthenticated.value = false
    // sessionStorage.removeItem('isAuthenticated')
    // ElMessage.error('登录已过期，请重新登录')
    // router.push('/login')
    //   }
    }

  // onMounted(() => {
  //   islogin()
  // })

  const userRole = computed(() => role.value)

  // 设置用户信息并保存到 sessionStorage
 const setUserInfo = (data) => {
    if (data.token) {
      setToken(data.token)
      token.value = data.token
      isAuthenticated.value = true
      sessionStorage.setItem('isAuthenticated', 'true')
    } else {
      isAuthenticated.value = false
      sessionStorage.removeItem('isAuthenticated')
    }

    if (data.user) {
      user.value = data.user
      sessionStorage.setItem('user', JSON.stringify(data.user))
    }
    if (data.role) {
      role.value = data.role
      sessionStorage.setItem('role', data.role)
    }
    if (data.idnumber) {
      idnumber.value = data.idnumber
      sessionStorage.setItem('idnumber', data.idnumber)
    }
    if (data.email) {
      email.value = data.email
      sessionStorage.setItem('email', data.email)
    }
    if (data.phone) {
      phone.value = data.phone
      sessionStorage.setItem('phone', data.phone)
    }
  }

  // 登录
 const login = async (credentials) => {
    try {
      const res = await loginApi(credentials)
      setUserInfo(res)
      return res
    } catch (error) {
      throw error
    }
  }

  // 获取用户信息
  const loadUserInfo = async () => {
    try {
      const res = await getUserInfo()
      const userData = {
        user: res.data.user,
        idnumber: res.data.idnumber,
        email: res.data.email,
        phone: res.data.phone
      }
      
      setUserInfo({
        ...userData,
        token: token.value,
        role: role.value
      })
      
      return res
    } catch (error) {
      console.error('获取用户信息失败:', error)
      removeToken()
      throw error
    }
  }

  // 登出时清除所有存储
 const logout = () => {
    token.value = null
    user.value = null
    role.value = null
    idnumber.value = null
    email.value = null
    phone.value = null
    isAuthenticated.value = false
    removeToken()
    // 清除所有 sessionStorage 数据
    sessionStorage.clear()
    
    router.push('/login')
  }

  return {
    token,
    user,
    role,
    idnumber,
    email,
    phone,
    isAuthenticated,
    userRole,
    login,
    logout,
    loadUserInfo,
    setUserInfo,
    islogin
  }
})




// import { defineStore } from 'pinia'
// import { ref, computed,onMounted } from 'vue'
// import router from '@/router'
// import { login as loginApi, getUserInfo,inspectlogin } from '@/api/auth'
// import { getToken, setToken, removeToken } from '@/utils/auth'
// import { ElMessage } from 'element-plus'
// import { useRoute } from 'vue-router' // 导入 useRoute

// export const useAuthStore =  defineStore('auth', () => {
//   const token = ref(getToken())
//   const user = ref(null)
//   const role = ref(localStorage.getItem('role'))
//   const idnumber= ref(null)
//   const email= ref(null)
//   const phone= ref(null)
//   const isAuthenticated = ref(false)
//   const route = useRoute() // 获取当前路由信息

//  // 检查登录状态
//  const islogin = async () => {
//   if (route.path !== '/login') { // 只在不是登录流程时检查登录状态
//     try {
//       const res = await inspectlogin()
//       console.log(res);
      
//       if (res.data === true) {
//         isAuthenticated.value = true
//       } else {
//         ElMessage.error('未登录')
//         isAuthenticated.value = false
//       }
//     } catch (error) {
//       console.error('检查登录状态时出错:', error)
//       ElMessage.error('检查登录状态时出错')
//     }
//   }
// }
// // 使用 onMounted 钩子在组件挂载时检查登录状态
// onMounted(() => {
//   islogin()
// })

//   // 用户角色
//   const userRole = computed(() => role.value)

//   // 设置用户信息
//   function setUserInfo(data) {
//     if (data.token) {
//       setToken(data.token)
//       token.value = data.token
//       isAuthenticated.value = true // 设置为已认证
//     }
//     else {
//       isAuthenticated.value = false // 设置为未认证
//     }
//     if (data.user) {
//       user.value = data.user
//     }
//     if (data.role) {
//       role.value = data.role
//       localStorage.setItem('role', data.role)
//     }
//     if (data.idnumber) {
//       idnumber.value = data.idnumber
//     }
//     if (data.email) {
//       email.value = data.email
//     }
//     if (data.phone) {
//       phone.value = data.phone
//     }
//     console.log(email.value);
    
//   }

//   // 登录
//   async function login(credentials) {
//     try {
//       const res = await loginApi(credentials)
//       setUserInfo(res)
//       return res
//     } catch (error) {
//       throw error
//     }
//   }

//   // 获取用户信息
//   async function loadUserInfo() {
//     try {
//       const res = await getUserInfo()
//       console.log('获取用户信息响应:', res);
      
//       // 只更新用户相关信息，不更新token和认证状态
//       const userData = {
//         user: res.data.user,
//         idnumber: res.data.idnumber,
//         email: res.data.email,
//         phone: res.data.phone
//       }
      
//       // 保留现有的token和认证状态，只更新用户数据
//       setUserInfo({
//         ...userData,
//         token: token.value,  // 保持现有token
//         role: role.value     // 保持现有角色
//       })
      
//       return res
//     } catch (error) {
//       console.error('获取用户信息失败:', error)
//       throw error
//     }
//   }

//   // 登出
//   function logout() {
//     token.value = null
//     user.value = null
//     role.value = null
//     isAuthenticated.value = false
//     removeToken()
//     localStorage.removeItem('role')
//     router.push('/login')
//   }

//   return {
//     token,
//     user,
//     role,
//     isAuthenticated,
//     userRole,
//     login,
//     logout,
//     loadUserInfo,
//     setUserInfo,
//     islogin
//   }
// }) 